package com.learn.english.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.learn.english.mapper.KnowledgeMapper;
import com.learn.english.model.entity.KnowledgeBase;
import com.learn.english.service.KnowledgeService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 知识库管理服务实现类
 */
@Service
public class KnowledgeServiceImpl extends ServiceImpl<KnowledgeMapper, KnowledgeBase> implements KnowledgeService {

    @Resource
    private KnowledgeMapper knowledgeMapper;

    /**
     * 获取知识条目列表
     * @param params 查询参数
     * @return 知识条目列表
     */
    @Override
    public List<KnowledgeBase> getKnowledgeList(Map<String, Object> params) {
        String title = params.get("title") != null ? params.get("title").toString() : null;
        Integer categoryId = params.get("categoryId") != null ? Integer.parseInt(params.get("categoryId").toString()) : null;
        return knowledgeMapper.selectByCondition(title, categoryId);
    }

    /**
     * 分页获取知识条目列表
     * @param params 查询参数
     * @return 包含分页数据的Map
     */
    @Override
    public Map<String, Object> getKnowledgeListByPage(Map<String, Object> params) {
        // 提取查询参数
        String title = params.get("title") != null ? params.get("title").toString() : null;
        Integer categoryId = params.get("categoryId") != null ? Integer.parseInt(params.get("categoryId").toString()) : null;
        Integer pageNum = params.get("pageNum") != null ? Integer.parseInt(params.get("pageNum").toString()) : 1;
        Integer pageSize = params.get("pageSize") != null ? Integer.parseInt(params.get("pageSize").toString()) : 10;
        
        // 计算偏移量
        Integer offset = (pageNum - 1) * pageSize;
        
        // 查询数据和总数
        List<KnowledgeBase> list = knowledgeMapper.selectPage(title, categoryId, offset, pageSize);
        Integer total = knowledgeMapper.countByCondition(title, categoryId);
        
        // 组装返回数据
        Map<String, Object> result = new HashMap<>();
        result.put("list", list);
        result.put("total", total);
        result.put("pageNum", pageNum);
        result.put("pageSize", pageSize);
        result.put("pages", (int) Math.ceil((double) total / pageSize));
        
        return result;
    }

    /**
     * 根据ID获取知识条目详情
     * @param id 知识条目ID
     * @return 知识条目对象
     */
    @Override
    public KnowledgeBase getKnowledgeById(Long id) {
        return knowledgeMapper.selectById(id);
    }

    /**
     * 添加知识条目
     * @param knowledgeBase 知识条目对象
     * @return 是否添加成功
     */
    @Override
    public boolean addKnowledge(KnowledgeBase knowledgeBase) {
        return knowledgeMapper.insert(knowledgeBase) > 0;
    }

    /**
     * 更新知识条目
     * @param knowledgeBase 知识条目对象
     * @return 是否更新成功
     */
    @Override
    public boolean updateKnowledge(KnowledgeBase knowledgeBase) {
        return knowledgeMapper.updateById(knowledgeBase) > 0;
    }

    /**
     * 删除知识条目
     * @param id 知识条目ID
     * @return 是否删除成功
     */
    @Override
    public boolean deleteKnowledge(Long id) {
        return knowledgeMapper.deleteById(id) > 0;
    }

    /**
     * 批量删除知识条目
     * @param ids 知识条目ID数组
     * @return 是否删除成功
     */
    @Override
    public boolean batchDeleteKnowledge(List<Long> ids) {
        if (ids == null || ids.isEmpty()) {
            return false;
        }
        return knowledgeMapper.deleteBatchIds(ids) > 0;
    }
}